package btc.backend.generator;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import btc.backend.process.ConnectionFactory;

/**
 * Generador de Pallets.
 * @author Dario
 *
 */
public class GeneradorDePallet {

	/**
	 * Metodo encargado de la generacion del pallet.
	 * @param tamanio cantidad de bloques en el pallet
	 * @param dimension dimensiones de los bloques
	 * @param idMaquina identificador de la maquina que genera el pallet
	 */
	public int generar(int tamanio, Dimension dimension, int idMaquina){
		
		Connection conexion =  ConnectionFactory.getConnection();

        int idPallet = -1;
		try {
			Statement st = conexion.createStatement(); 
			
			ResultSet r = st.executeQuery("VALUES (NEXT VALUE FOR pallet_seq)");

			if(r.next()){
				idPallet = r.getInt(1);
				PreparedStatement insertPalletSt = conexion.prepareStatement("insert into pallet values (?,current_date,null,?)");
				insertPalletSt.setInt(1, idPallet);
				insertPalletSt.setInt(2, idMaquina);
				insertPalletSt.execute();
				r.close();
				
				PreparedStatement insertBloqueSt = conexion.prepareStatement("insert into bloque values (next value for bloque_seq,?,?,?,?,null)"); 
				
				int cotaSuperiorAncho = (dimension.getAncho()+ dimension.getVariacionAncho());
				int cotaInferiorAncho = (dimension.getAncho()- dimension.getVariacionAncho());
				int cotaSuperiorAlto = (dimension.getAlto()+ dimension.getVariacionAlto());
				int cotaInferiorAlto = (dimension.getAlto()- dimension.getVariacionAlto());
				int cotaSuperiorLargo = (dimension.getLargo()+ dimension.getVariacionLargo());
				int cotaInferiorLargo = (dimension.getLargo()- dimension.getVariacionLargo());
				
				for (int i = 0; i < tamanio; i++) {
					insertBloqueSt.setInt(1, idPallet);
					insertBloqueSt.setInt(2, (int) Math.floor(Math.random()*(cotaSuperiorAncho-cotaInferiorAncho+1)+cotaInferiorAncho));
					insertBloqueSt.setInt(3, (int) Math.floor(Math.random()*(cotaSuperiorAlto-cotaInferiorAlto+1)+cotaInferiorAlto));
					insertBloqueSt.setInt(4, (int) Math.floor(Math.random()*(cotaSuperiorLargo-cotaInferiorLargo+1)+cotaInferiorLargo));
					
					insertBloqueSt.addBatch();
				}
				
				insertBloqueSt.executeBatch();
			}
			else{
				System.err.println("Error en la generacion del pallet: Identificador inexistente");
			}


							
		} catch (SQLException e) {
		
			e.printStackTrace();
		}

        return idPallet;

	}
	
}
